perm filename WORDS.F4[NEW,LCS]15 blob sn#445289 filedate 1979-05-28 generic text, type T, neo UTF8
00100	C  WORDS,  NAMEXT, TYPOUT
00200		
00300		SUBROUTINE WORDS
00400		INTEGER PWDS
00500		COMMON R2,JA,RC,J2,R3,R4,R5,R6,R7,X,IA,N
00600		1,Z,J,KN,ISET,KNT,Q(26),JR /PTR/PWDS(1)
00700		1 /LIMIT/LIMITαiTEM,LL,IS,IX
00800	C  /SCX/ IS ALSO IN SCMSS, NOTBMS, RHYTH, BEAMS, NEWR(IN LOOP.FAI), SCAN.FAI
00900	C **** WHEN JALPHA IS EXTENDED FIX LOOP AT 365 AND SUBR. NEWR(IN LOOP)
01000	C **** AND SUBR. SCMSS, NOTBMS, RHYTH AND BEAMS
01100		COMMON/SCX/ICOM,MINUS,IDOT,IEQ,LPRN,IRPRN,IPLUS,ISTAR,ICOLON,
01200		1 ISEMI,IDBQT,IBLA,IDOL,IPRCNT,IANPR,IAT,INUM,LESS,IGT,IAPOS,
01300		1 IQUES,IEXCLA,LBRK,RBRK,UPAR,DNAR,DBLAR,SLA,XX,ZZ,
01400		1 J4,L,Y,K,RX,RZ,RA,J5  /XRN/RN(1) /ALF/INP(72),ML
01500		COMMON/SCN/KEL,KR,KU,KD,KSLA,NONO(30)
01600	CC	COMMON/SCN/LEL,LR,LU,LD,KSLA,LE,LC,LS,LF,LA,LI,LW
01700		DIMENSION IAZ(26),JALPHA(30)
01800		COMMON/A2Z/LA,LB,LC,LD,LE,LF,LG,LH,LI,LJ,LK,LEL,LM,
01900		1 LN,LO,LP,LQ,LR,LS,LT,LU,LV,LW,LX,LY,LZ
02000		EQUIVALENCE (ICOM,JALPHA),(INP2,INP(2)),(IAZ,LA)
02100		DATA LEL/'L'/,LR/'R'/,LU/'U'/,LD/'D'/,LE/'E'/,KSLA/'/'/
02200		1,LC/'C'/,LS/'S'/,LF/'F'/,LA/'A'/,LI/'I'/,LW/'W'/
02300		DATA IAZ/'A','B','C','D','E','F','G','H','I','J','K','L','M',
02400		1 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z'/ 
02500		DATA JALPHA/',','-','.','=','(',')','+','*',':',';'
02600		1 ,'"',' ','$','%','&','@','#','<','>',1H','?','!'
02700		1 ,"555004020100,"565004020100,"571004020100,"5004020100,
02800		1 "135004020100,'/','[',']'/
02900	C   FOR ENTERING TEXT: T, POS., STF., NT#., SIZE,  RHYTHM≠0
03000	C NOT ANY LONGER****** R6 ≠0 CALLS NOTE NUM. SETUP
03100	CXX	JR=-1
03200		KNT=-1
03300	C COUNTER FOR SEPARATE TEXT ITEMS.
03400	CC	IF(R3.NE.999)GO TO 131
03500	CXX	IF(INP2.NE.LF)GO TO 131
03600	C TYPE 'TF n,n,n,n' TO READ TYPEIN FROM A FILE.
03700	CXX	CALL TYPSTR('TYPE FILE NAME-- ')
03800	CCC	TYPE 331
03900	CXX	ACCEPT 631,KN
04000	CXX	IF(LOOK(KN).EQ.0)RETURN
04100	CXX	R2=R3
04200	CXX	R3=R4
04300	CXX	R4=R5
04400	CXX	R5=R6
04500	C  'TF' PUSHES PARAM LIST ONE NOTCH TO RIGHT.
04600	C  GO BACK IF NO FILE FOUND.  READS ONLY FILES WITH NO DIRECTORY.
04700	CXX	CALL IFILE(21,KN)
04800	CXX	READ(21,431)INP
04900	CXX	JR=0 
05000	CC	R6=1
05100	CXX	GO TO 531
05200	CXX631	FORMAT(A5)
05300	CCC331	FORMAT(' TYPE FILE NAME-- '$)
05400	431	FORMAT(72A1)
05500	131	CALL TYPE
05600	531	DO 31 KN=72,1,-1
05700	31	IF(INP(KN).NE.IBLA)GO TO 33
05800	C  KN=NUM OF CHARACTERS
05900	C  DON'T END WITH '*' IN 'LETTERS' INPUT!!!!!!!!
06000	C  , - . = ( ) + * : ; " BLANK (FONTS) ' --THIS IS ORDER PAST ALPHAB.
06100	C [=QTR NOTE, ]=HALF NOTE, ↑=#, ↓=b, ↔=NATURAL, 3 SLOTS STILL OPEN
06200	
06300	C  50 &=NON-ITALICS(BDR), 51 @=ITALICS(BDI)
06400	C  48 &&=BDL (LIGHT-FACE)     49 IS STILL FREE ****
06500	C  52 #=RETURN TO PRIMITVE FONT, 53 <=OPEN, 54 >=FILLED. ('=55)
06600	C FRENCH ACCENTS=ACCUTE=64, GRAVE=65, CMFLX=66, UMLT=67, CIDLA=68, 69 FREE.
06700	C                 <<          >>       $$        %%       ##
06800	33	L=1
06900		RC=0
07000		IF(INP(KN).NE.KSLA)GO TO 333
07100		IF(INP(KN+1).NE.KSLA)GO TO 133
07200	C  TYPE // TO PRINT A SINGLE SLASH.  (NO SPACE BETWEEN!)
07300	333	KN=KN+1
07400		INP(KN)=KSLA
07500	C  SO TRAILING BLANKS ARE DELETED.
07600	133	LL=1
07700		RZ=0 
07800		ISET=IS
07900		IF(R3.LT.1000)GO TO 233
08000		RZ=1
08100		R3=R3-1000.
08200		RC=R3
08300	C  ADD 1000 TO POSITION (R3+1000) FOR CENTERING AT POS. R3.
08400	233	RA=R3
08500	C   RA= ADDS UP TOTAL SPACE NEEDED
08600		RX=0
08700	C  FOR SETLET
08800	368	RN(IS+1)=16
08900		RN(IS+3)=RA
09000	C  NEXT IS A MAGIC NUMBER FOR SPACING LETTERS.
09100	CC	Y=39.6*RSTJ3
09200	C  RBL IS FOR CONTROL(NON-LETTERS, ETC.) CHARACTERS.
09300		RN(IS+2)=R2
09400		RN(IS+4)=R4
09500		CALL NOZERO(R5)
09600		RN(IS+5)=R5
09700		IF(R5.GE.100)R5=R5-100
09800	C >100 FOR TEXT IN ORCH SCORES TO GO IN ALL SEP. PARTS.
09900	CKK	KK=0
10000		DO 364 J5=6,8
10100		Z=0
10200		DO 363 J4=1,4
10300	361	IA=INP(L)
10400		IF(IA.NE.KSLA)GO TO 365
10500	C  NEG. SPACE IS ENTERED IN P1 FOR EACH "FIRST" ITEM.
10600		IF(INP(L+1).NE.KSLA)GO TO 433
10700	C  TYPE // TO PRINT A SINGLE SLASH.  (NO SPACE BETWEEN!)
10800	CKK	KK=KK+1
10900		L=L+1
11000		GO TO 365
11100	433	J3=J4
11200		DO 367 KA=J5,8
11300		X=99.
11400		DO 366 K=J3,4
11500		Z=Z+X
11600	366	X=X*100.0
11700		RN(IS+KA)=Z
11800		J3=1
11900	367	Z=0
12000		L=L+1
12100	C  L=CHARACTER COUNTER
12200		GO TO 369
12300	365	DO 362 J=1,30
12400		IF(IA.NE.JALPHA(J))GO TO 362
12500		N=35+J
12600	C  FOUND A SPECIAL CHARACTER.
12700		K=N
12800		IFNT=0
12900		IF(N.LT.48)GO TO 39
13000		IF(N.GT.54)GO TO 39
13100		IF(IA.NE.INP(L+1))GO TO 39
13200	C NEXT FOR DBL CHARS.
13300		GO TO(1,2,3,39,7,4,5)N-47
13400	C FOR FRENCH ACCENTS
13500	1	N=66
13600	CIRCUMFLEX   TYPE $$
13700		GO TO 6
13800	2	N=67
13900	C UMLAUT   TYPE %%
14000		GO TO 6
14100	3	N=48
14200	C &&=BDL40 FONT
14300		GO TO 6
14400	4	N=64
14500	C ACCUTE  TYPE >>
14600		GO TO 6
14700	7	N=68
14800	C CEDILLA  TYPE ##
14900		GO TO 6
15000	5	N=65
15100	C GRAVE  TYPE <<
15200	CC	IF(N.NE.50)GO TO 39
15300	CC	IF(IA.NE.INP(L+1))GO TO 39
15400	6	K=N
15500		L=L+1
15600	C  TYPE && FOR LIGHT-FACE (BDL).  PUSH PTR (L) ALONG 1 MORE.
15700		GO TO 39
15800	362	CONTINUE
15900	38	N=10-(LA-INP(L))/536870912
16000	C   MAGIC NUMBER TO FIND LETTERS
16100		IF(N.LT.10)N=N+7
16200		K=N
16300		IF(KFNT)IFNT=0
16400		IF(N.LT.40)GO TO 39
16500		N=N+28
16600		KFNT=-1
16700	C  TO INITIALIZE AUTOMATIC LOWER CASE SYSTEM.
16800		K=N-60
16900	C  K IS ACTUAL LETTER NUMB. (a=10, ETC.)
17000		IFNT=-1
17100	C LOWER CASE LETTERS ARE 60 .GT. UPPER. A=10, a=70, b=71, etc.
17200	39	L=L+1
17300	C  BLANK=47  =99 WHEN NO MORE CHARS TO COME.
17400		IF(N.LT.63.OR.N.GT.68)CALL SPACER(K,IFNT,RX,3.32)
17500	C  NUM↑↑=19.7/5.96  FOR BASIC SPACE PER LETTER.
17600	C  GET SPACE FOR THIS LETTER.  IGNORE ACCENTS (63-68)
17700		X=N
17800		IF(J4.EQ.2)X=X*10000.
17900		IF(J4.EQ.3)X=X*100.
18000		IF(J4.EQ.1)X=X*1000000.
18100	363	Z=Z+X
18200	364	RN(IS+J5)=Z
18300	369	RN(IS+9)=RX
18400		RN(IS+10)=RZ
18500		IF(RZ.EQ.0)KNT=KNT+1
18600		IF(RC.NE.0)RN(IS+10)=RC
18700		RC=0
18800	C  FOR CONTINUATION
18900		RA=RA+RX*R5
19000		IF(IA.EQ.KSLA)RA=RA+5
19100	C  SPACES GROUPS DIVIDED BY SLASHES
19200		RX=0
19300		IF(RZ.NE.0)GO TO 370
19400	C  SKIP IF P10=1, REQUIRED FOR CONTINUATION OF TEXT.
19500		IF(IBLANK(IS,7))RZ=-2
19600	C IF LAST CHAR IN P7 IS BLANK RESET WDCNT, GET RID OF P8 AND P9
19700		IF(IBLANK(IS,6))RZ=-3
19800	C ↑↑↑↑ LAST CHAR IN P6=BLNK ZAPS P7 IF NOT NEEDED. RZ=- CHANGES WORDCNT
19900	370	RN(IS)=7+RZ
20000		IS=IS+10+RZ
20100		LL=LL+1
20200		PWDS(ITEM+LL)=IS
20300	C  PUT IT IN THE PNTR ARRAY
20400		RZ=1.
20500		IF(IA.EQ.KSLA)RZ=0
20600		IF(L.LT.KN)GO TO 368
20700	C   WAS ↑↑↑↑↑↑↑ .LE.    5/22/76
20800	
20900		IF(KNT.GT.0)CALL SETLET
21000	C  GOES TO SETLET AUTOMATICALLY IF MORE THAN ONE SLASH FOUND.
21100		IF(KFNT)IFNT=0
21200		KFNT=0
21300		INP(1)=0
21400	C   SO IT WON'T FIND A COMMAND IN THE MAIN PROG.
21500		END
21600	C  PACKS 4 CHARS/WD, 3 WDS/ITEM.
21700	
21800	CC	SUBROUTINE NAMEXT(JA,NAME,IEXT)
21850		SUBROUTINE DUMMY
21900		COMMON /MKX/MKX(7),PRNL
22000		DIMENSION JA(1),A(5),FM(7)
22100		DATA A/'A1','A2','A3','A4','A5'/,FM(1)/'('/
22200		EQUIVALENCE (A5,A(5)),(FM2,FM(2)),(FM3,FM(3)),(FM4,FM(4)),
22300		1 (FM5,FM(5)),(FM6,FM(6)),(FM7,FM(7)),(A3,A(3))
22400		DO 9 K=2,7
22500	9	FM(K)=' '
22600		ID=0
22700		IA=0
22800		NAME=' '
22900		DO 1 K=20,1,-1
23000		IF(JA(K).EQ.' ')GO TO 1
23100	5	DO 2 L=K-1,1,-1
23200		J=JA(L)
23300		IF(J.NE.' ')GO TO 3
23400		IA=L
23500		GO TO 4
23600	3	IF(J.NE.'.')GO TO 2
23700		ID=L
23800		K=L
23900	C '.' ASSUMES THERE IS AN EXTENSION 
24000		GO TO 5
24100	2	CONTINUE
24200		GO TO 4
24300	1	CONTINUE
24400	C ALL BLANK IF WE GET HERE
24500		RETURN
24600	4	IF(IA.NE.0)GO TO 6
24700		IF(JA(1).EQ.-1)RETURN
24800	C  ↑↑↑ FOR 'RS', 'SA', 'G', ETC. WITH NO NAME FOLLOWING.
24900		IF(ID.NE.0)GO TO 7
25000	C NOW ONLY A NAME IS ON THIS LINE
25100		FM2=A5
25200		FM3=PRNL
25250	C GET LEFT PARENTHESIS
25300		REREAD FM,NAME
25400		GO TO 10
25500	7	FM3=',A1,'
25600		FM2=A(ID-1)
25700		FM4=A3
25800		FM5=PRNL
25900	C  FOUND NAME AND EXTENSION
26000		REREAD FM, NAME,K,IEXT
26100		GO TO 11
26200	6	IF(IA.GT.5)RETURN
26300	C .GT.5 = TOO MUCH IN FRONT OF NAME!!
26400		FM2=A(IA)
26500		FM3=','
26600		IF(ID.NE.0)GO TO 8
26700		FM4=A5
26800		FM5=PRNL
26900	C  FOUND  'WORD', NAME    WORD= SA, RS, GM, ETC.
27000		REREAD FM,K,NAME
27100		GO TO 10
27200	8	FM4=A(ID-IA-1)
27300		FM5=',A1,'
27400		FM6=A3
27500		FM7=PRNL
27600		REREAD FM,K,NAME,K,IEXT
27700	11	CALL LO2UP(IEXT)
27800	10	CALL LO2UP(NAME)
27900		END
28000	
28100		SUBROUTINE TYPOUT
28200		COMMON /SC/J,L,MK,ISKP,XMINUS,N,IEXP,LK,NNUM,JJ,JA,DBST,NFLG,
28300		1 JX,ISM,IQ,VX(50),IMP,K,KN,M,MD,IBLA /ALF/INP(72) /IDEV/IDEV
28400		IF(IDEV.NE.5)RETURN
28500		DO 1 KK=72,1,-1
28600	1	IF(INP(KK).NE.IBLA)GO TO 2
28700	2	CALL TYPINT(MODE)
28800		CALL TYPCHR('   ',3)
28900		DO 3  KKK=1,KK
29000	3	CALL TYPCHR(INP(KKK),1)
29100		CALL TYPCRLF
29200		END
29300	
29400		SUBROUTINE PACKX(NAM,KNM)
29500		DIMENSION KNM(5)
29600		DATA KK/128/,LL/"377777777777/,JJ/"2000000000/
29700		1 , MM/"774000000000/
30000		NAM=0
30100		DO 12 K=5,1,-1
30200		NAM=NAM .OR. (KNM(K) .AND. MM)
30300		IF (K.EQ.1)RETURN
30400	17	IF (NAM.GE.0)GO TO 13
30500		NAM = (( NAM .AND. LL)/KK) .OR. JJ
30600		GO TO 12
30700	13	NAM = NAM / KK
30800	12	CONTINUE
30900		RETURN
31000		END
31100	
31200		SUBROUTINE NAMEXT(I,NAME,IEXT)
31300	C FINDS NAME.EXT IN A1 STRING
31400		DIMENSION I(1)
31500	
31510		IF(I(1).NE.-1)GO TO 9
31600	C FIRST PASS UP 'G', 'GM', 'RS', ETC.  (=-1)
31700		DO 1 K=1,72
31800	1	IF(I(K).EQ.' ')GO TO 2
31900	C NOW PASS BLANKS
32000	2	J=72
32050		DO 3 J=K+1,72
32100	3	IF(I(J).NE.' ')GO TO 4
32200	C NOW FOUND START OF WORD (UNLESS ALL BLANKS)
32300	4	IF(J.NE.72)GO TO 5
32400		NAME=' '
32600		RETURN
32610	9	J=1
32700	5	DO 6 K=J,72
32800		IF(I(K).EQ.' ')GO TO 7
32900	C JUMP IF NAME ONLY
33000	6	IF(I(K).EQ.'.')GO TO 8
33100	7	CALL PACKX(NAME,I(J))
33200		RETURN
33250	8	CALL RLOOP(I(61),I(J),K-J)
33600		CALL PACKX(NAME,I(61))
33700		CALL PACKX(IEXT,I(K+1))
33800		END